﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using ECOSYSTEM_BL;
using ECOSYSTEM_Dominio;

namespace ECOSYSTEMPRESENTACION
{
    public partial class frmRegSerie : Form
    {
        public frmRegSerie()
        {
            InitializeComponent();
        }
        Serie laSerie = new Serie();
        SerieBL laSerieBL = new SerieBL();
        Boolean res; 
       
        //PARA GUARDAR SERIE EN BD              
        private Boolean GuardarSerieNueva(Int32 ProductoID,String NroSerie, Int32 CodRegCom)
        {
            laSerie.ProductoID = ProductoID;
            laSerie.RegCompraID = CodRegCom;
            laSerie.NroSerie = NroSerie;
            laSerie.FecEntradaSerie = DateTime.Now.ToShortDateString();
            laSerie.Estado = "ACTIVO";
            laSerieBL.guardarSerie(laSerie);
            return true;
        }
        //PARA ACTUALIZAR SERIE DE BD
        public void ActualizarSerieBD(Int32 IDSerie, String nroSerie, Int32 CodRegCompra)
        {
            try
            {
                laSerie.SerieID = IDSerie;
                laSerie.NroSerie = nroSerie;
                laSerie.RegCompraID = CodRegCompra;
                laSerieBL.ActualizarSerie(laSerie);
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }

        }
        //ELIMINAR SERIE DE LA LISTA CARGADOS DESDE BD
        public void EliminarSerieDeLaLista(Int32 CodProd)
        {
            Int32 nroElem = dgvListaSeries.Rows.Count;
            for (int i = nroElem - 1; i >= 0; i--)
            {
                if (Convert.ToInt32(dgvListaSeries["ProductoID", i].Value) == CodProd)
                {
                    dgvListaAlterna.Rows.Add(dgvListaSeries["SerieID", i].Value);
                    dgvListaSeries.Rows.Remove(dgvListaSeries.Rows[i]);
                }
                nroElem = dgvListaSeries.Rows.Count;
            }
        } 
        //PARA ELIMINAR SERIES DE LA BD
        public void EliminarSerieBD()
        {
            if (dgvListaAlterna.Rows.Count > 0)
            {
                for (int i = 0; i <= dgvListaAlterna.Rows.Count - 1; i++)
                {
                    laSerieBL.EliminarSerie(Convert.ToInt32(dgvListaAlterna["SerieE", i].Value));
                }
            }
        }        
        //CARGAR SERIES REGISTRADAS EN BD
        public void LlenarDGV(Int32 RegCompID)
        {
            try
            {
                List<Serie> lista;
                lista = laSerieBL.ObtenerListaSeriePorRegCompra(RegCompID);
                if (lista.Count > 0)
                {
                    foreach (Serie fila in lista)
                    {
                        dgvListaSeries.Rows.Add(fila.ProductoID, fila.NroSerie, fila.NameProduc, fila.SerieID, "R");
                    }
                }
            }
            catch (Exception Ex) { MessageBox.Show(Ex.Message); }
        }
        //AGREGAR SERIE A LA LISTA
        private void AgregarProductoDGV(String Serie, String Producto) {
            Int32 ProductoID = Convert.ToInt32(lblCodigoProducto.Text);           
            dgvListaSeries.Rows.Add(ProductoID,Serie, Producto,"0","N");
            dgvListaSeries.ClearSelection();            
            VerificaCantidadAIngresar();
        }
        //VERIFICAR CANTIDAD DE SERIES POR PRODUCTO
        private void VerificaCantidadAIngresar() {
            txtCantidad.Text = Convert.ToString(Convert.ToInt32(txtCantidad.Text) - 1);
            if (txtCantidad.Text == "0")
            {
                txtSerie.Enabled = false;
                btnAgregar.Enabled = false;
                txtProducto.Text = "";
                btnOmitir.Select();
            }
            else
            {                
                txtSerie.Select();
                dgvListaSeries.Enabled = true;
            }
            txtSerie.Text = "";
        }
        //ACTUALIZAR SERIE DE LISTA
        private void ActualizarSerie() {
            if (VerificarSerie(txtSerie.Text))
            {
                Int32 nroFila = Convert.ToInt32(lblNroFila.Text);
                dgvListaSeries["ProductoID", nroFila].Value = lblCodigoProducto.Text;
                dgvListaSeries["Serie", nroFila].Value = txtSerie.Text;
                dgvListaSeries["NameProducto", nroFila].Value = txtProducto.Text;
                if (Convert.ToString(dgvListaSeries["Identificador", nroFila].Value) == "N")
                {
                    dgvListaSeries["Identificador", nroFila].Value = "N";
                }
                if (Convert.ToString(dgvListaSeries["Identificador", nroFila].Value) == "R")
                {
                    dgvListaSeries["Identificador", nroFila].Value = "A";
                }
                lblNroFila.Text = "";
                txtProducto.Text = "";
                txtSerie.Text = "";
                dgvListaSeries.Enabled = true;
                VerificaCantidadAIngresar();
                btnOmitir.Enabled = true;                
            }
        }
        //ELIMINAR SERIE DE LA LISTA
        public void EliminarSerieLista(Int32 CodProd)
        {
            Int32 nroElem = dgvListaSeries.Rows.Count;
            for (int i = nroElem - 1; i >= 0; i--)
            {
                if (Convert.ToInt32(dgvListaSeries["ProductoID", i].Value) == CodProd)
                {
                    dgvListaSeries.Rows.Remove(dgvListaSeries.Rows[i]);
                }
                nroElem = dgvListaSeries.Rows.Count;
            }
        }                       
        //VERIFICAR SI LA SERIE YA SE ENCUENTRA EN LISTA
        private Boolean VerificarSerie(String serie) {
            if (dgvListaSeries.Rows.Count > 0)
            {
                for (int i = 0; i <= dgvListaSeries.Rows.Count - 1; i++)
                {
                    if (dgvListaSeries["Serie", i].Value.ToString() == serie)
                    {
                        res = false;
                        txtSerie.Select();
                        MessageBox.Show("LA SERIE YA ESTA EN LA LISTA");                        
                        break;
                    }
                    else
                        res = true;
                }
            }
            else
                res = true;

            return res;
        }
        //GESTIONAR LISTA DE SERIES
        public void GestionarSerie(Int32 CodRegCom) {
            try
            {
                for (int i = 0; i <= dgvListaSeries.Rows.Count - 1; i++) { 
                    String tificador = Convert.ToString(dgvListaSeries["Identificador",i].Value);
                    Int32 IDProd = Convert.ToInt32(dgvListaSeries["ProductoID",i].Value);
                    String NumSerie = Convert.ToString(dgvListaSeries["Serie",i].Value);
                    Int32 IDSer = Convert.ToInt32(dgvListaSeries["SerieID",i].Value);
                    if (tificador == "N") {
                        GuardarSerieNueva(IDProd, NumSerie, CodRegCom);
                    }
                    if (tificador == "A") {
                        ActualizarSerieBD(IDSer, NumSerie, CodRegCom);
                    }
                }
                EliminarSerieBD();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }
        Int32 cantidad;
        public Int32 CantidadProducto(Int32 CodProd) {
            try
            {
                Int32 can = 0;
                for (int i = 0; i <= dgvListaSeries.Rows.Count - 1; i++) {
                    if (Convert.ToInt32(dgvListaSeries["ProductoID", i].Value) == CodProd)
                    {
                        can = can + 1;
                    }
                    cantidad = can;
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
            return cantidad;
        }
        // --> EVENTO <--

        private void btnOmitir_Click(object sender, EventArgs e)
        {
            try
            {
                this.Visible = false;
                dgvListaSeries.Enabled = true;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private void btnAgregar_Click(object sender, EventArgs e)
        {
            try
            {
                if(VerificarSerie(txtSerie.Text))
                        AgregarProductoDGV(txtSerie.Text, txtProducto.Text);
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }
        private void txtSerie_KeyDown(object sender, KeyEventArgs e)
        {
            try
            {
                if (e.KeyCode == Keys.Enter)
                {
                    if (lblNroFila.Text == "")
                    {
                        if (VerificarSerie(txtSerie.Text))
                            AgregarProductoDGV(txtSerie.Text, txtProducto.Text);
                    }
                    else
                    {
                        ActualizarSerie();
                    }
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }
        private void dgvListaSeries_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                Int32 nroFila = Int32.Parse(e.RowIndex.ToString());
                txtSerie.Enabled = true;
                btnAgregar.Enabled = true;
                lblNroFila.Text = Convert.ToString(nroFila);
                txtProducto.Text = Convert.ToString(dgvListaSeries["NameProducto", nroFila].Value);
                txtSerie.Text = Convert.ToString(dgvListaSeries["Serie",nroFila].Value);
                lblCodigoProducto.Text = Convert.ToString(dgvListaSeries["ProductoID",nroFila].Value);
                txtCantidad.Text =Convert.ToString(Convert.ToInt32(txtCantidad.Text) + 1);
                dgvListaSeries["Serie", nroFila].Value = "";
                btnOmitir.Enabled = false;
                txtSerie.Select();
                btnAgregar.Visible = false;
                btnActualizar.Visible = true;
                dgvListaSeries.Enabled = false;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private void btnActualizar_Click(object sender, EventArgs e)
        {
            try
            {
                ActualizarSerie();               
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private void dgvListaSeries_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                if (e.ColumnIndex == dgvListaSeries.Columns["Eliminar"].Index)
                {
                    if (MessageBox.Show("ESTA SEGURO DE ELIMINAR LA SERIE", "ELIMINAR SERIE", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                    {
                        dgvListaAlterna.Rows.Add(dgvListaSeries["SerieID", e.RowIndex].Value);                        
                        txtProducto.Text = Convert.ToString(dgvListaSeries["NameProducto", e.RowIndex].Value);                        
                        lblCodigoProducto.Text = Convert.ToString(dgvListaSeries["ProductoID", e.RowIndex].Value);
                        txtCantidad.Text = Convert.ToString(Convert.ToInt32(txtCantidad.Text) + 1);
                        dgvListaSeries.Rows.Remove(dgvListaSeries.Rows[e.RowIndex]);
                        txtSerie.Enabled = true;
                        txtSerie.Select();
                    }
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }
    }
}
